iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 6
0
自我挑戰組

「 Nice to meet you , JavaScript . 」- 學習日記 系列 第 6

初探JavaScript - JS全域變數與區域變數

  • 分享至 

  • xImage
  •  

在JavaScript中的變數區分為兩種範疇:全域範疇(Global scope)區域範疇(Local scope)

其中每一個function函式會自成一個範疇 – 區域範疇。在function函式中宣告的變數為區域變數區域變數指的是此變數只能提供在所屬的function函式中執行,不提供給functionc函式以外呼叫使用,當function函式執行完後,記憶體只會保留其執行的結果,變數的部分則會被記憶體消除釋放掉。而一般在script中宣告(var)的變數,如果不在特定的範疇,則為全域變數,全域變數可供大家呼叫使用。

當區域變數chickenPrice被function函式以外呼叫使用,則會出現錯誤訊息「chickenPrice is not defined」:
https://ithelp.ithome.com.tw/upload/images/20200906/20115106EuSascaS4u.png

全域變數sayhi可供function howmuch()呼叫使用:
https://ithelp.ithome.com.tw/upload/images/20200906/20115106eSOQwI3l8P.png

如下例,全域變數sayhi不是應該能夠被function aloha()呼叫使用嗎?那照理說sayhi變數值應該要被覆蓋指定為「歡迎光臨,區域變數」,但為什麼最後一行console.log(sayhi)的結果還是顯示sayhi一開始指定的變數值「歡迎光臨,全域變數」,而沒有被後來函式中指派的值所覆蓋?這是因為在function aloha()中使用sayhi變數時,前面加上了var,等於是重新宣告了一個sayhi的區域變數,跟外面的sayhi全域變數名稱雖然一樣,但實際上會被當作是完完全全不同的兩個變數:
https://ithelp.ithome.com.tw/upload/images/20200906/20115106PbPQmT8nD4.png

所以如果想要在function aloha()中使用全域變數sayhi,直接賦予變數值給sayhi即可,不要再var一次喔:
https://ithelp.ithome.com.tw/upload/images/20200906/20115106sS8hcwdVTS.png

資料參考來源: Hex School、w3schools.com


上一篇
初探JavaScript - JS函式(Functions)
下一篇
初探JavaScript - JS陣列
系列文
「 Nice to meet you , JavaScript . 」- 學習日記 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言